package com.googlecode.linkmein.domain;

import com.google.gdata.data.spreadsheet.ListEntry;
import com.google.gdata.data.spreadsheet.CustomElementCollection;
import static com.googlecode.linkmein.utils.Util.defaultString;

import java.util.ArrayList;
import java.util.List;

public class Gossipies extends ArrayList<Gossipy> {

    public Gossipies(Gossipy... gossipies) {
        for (Gossipy gossipy : gossipies) {
            this.add(gossipy);
        }
    }

    public static Gossipies load(List<ListEntry> entries) {
        Gossipies gossipies = new Gossipies();
        for (ListEntry entry : entries) {
            CustomElementCollection elements = entry.getCustomElements();
            List<String> tags = new ArrayList(elements.getTags());

            String englishName = defaultString(elements.getValue(tags.get(Gossipy.ENGLISH_NAME)));
            String chineseName = defaultString(elements.getValue(tags.get(Gossipy.CHINESE_NAME)));

            BasicAttributes attributes = new BasicAttributes(new Name(englishName, chineseName),
                    defaultString(elements.getValue(tags.get(Gossipy.CONSTELLATION))),
                    defaultString(elements.getValue(tags.get(Gossipy.HOBBIES))),
                    defaultString(elements.getValue(tags.get(Gossipy.SCARED))),
                    defaultString(elements.getValue(tags.get(Gossipy.IDOL))));

            Preference preference = new Preference(
                    defaultString(elements.getValue(tags.get(Gossipy.PREFEREDFOOD))),
                    defaultString(elements.getValue(tags.get(Gossipy.PREFEREDDRINK))),
                    defaultString(elements.getValue(tags.get(Gossipy.PREFEREDMUSIC))),
                    defaultString(elements.getValue(tags.get(Gossipy.PREFEREDMOVIE))),
                    defaultString(elements.getValue(tags.get(Gossipy.HATEDFOOD))));
            Group group = new Group(defaultString(elements.getValue(tags.get(Gossipy.GROUP))));
            String comment = defaultString(elements.getValue(tags.get(Gossipy.COMMENT)));
            String embarrassing = defaultString(elements.getValue(tags.get(Gossipy.EMBARRASSING)));

            gossipies.add(new Gossipy(attributes, preference, group, comment, embarrassing));
        }
        return gossipies;
    }

    public void loadGossipy(Employee employee) {
        for (Gossipy gossipy : this) {
            if (gossipy.getName().equals(employee.getName())) {
                employee.setGossipy(gossipy);
                return;
            }
        }
        employee.setGossipy(Gossipy.NULL);
    }
}
